pub fn dp_rec_mc(amount: u32) -> u32 {
    // 定义所有纸币面额
    let coins = [1, 2, 5, 10, 20, 30, 50, 100];
    
    // 创建一个大小为 amount + 1 的数组，初始值为 amount + 1（一个不可能的大值）
    let mut dp = vec![amount + 1; (amount + 1) as usize];
    dp[0] = 0; // 金额为 0 时，所需纸币数为 0

    // 遍历从 1 到 amount 的每个金额
    for i in 1..=amount {
        for &coin in &coins {
            if coin <= i {
                dp[i as usize] = dp[i as usize].min(dp[(i - coin) as usize] + 1);
            }
        }
    }

    // 如果 dp[amount] 仍然是初始值，则表示无法找零，否则返回 dp[amount]
    if dp[amount as usize] > amount {
        0 // 表示无法找零
    } else {
        dp[amount as usize]
    }
}